// 引入SDK核心类，js文件根据自己业务，位置可自行放置
var QQMapWX = require('../../../../../assets/lib/qqmap-wx-jssdk');
import { reqAddAddress, reqAddressInfo, reqUpdateAddress } from '../../../../../api/address'


Page({
  // 页面的初始数据
  data: {
    id: null,
    name: '', // 收货人
    phone: '', // 手机号
    provinceName: '', // 省
    provinceCode: '', // 省 编码
    cityName: '', // 市
    cityCode: '', // 市 编码
    districtName: '', // 区
    districtCode: '', // 区 编码
    address: '',  // 详细地址
    fullAddress: '', // 完整地址 (省 + 市 + 区 + 详细地址)
    isDefault: false // 设置默认地址，是否默认地址 → 0：否  1：是
  },
  onLoad(e) {
    this.data.id = e?.id
    this.getDetail(e?.id)
    // 实例化API核心类
    this.qqmapsdk = new QQMapWX({
      key: 'DILBZ-OQ2CJ-B67FM-DVSCF-6QWQ6-NGBGP'
    });
  },
  async getDetail(id) {
    if (!id) return
    const { data } = await reqAddressInfo(this.data.id)
    this.setData({
      ...data
    })
  },
  // 省市区选择
  onAddressChange(e) {
    const [provinceCode, cityCode, districtCode] = e.detail.code
    const [provinceName, cityName, districtName] = e.detail.value
    this.setData({
      provinceCode, cityCode, districtCode, provinceName, cityName, districtName,
    })
  },

  // 保存收货地址
  async saveAddrssForm(e) {
    const { provinceName, cityName, districtName, address, isDefault } = this.data
    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault: isDefault ? 1 : 0
    }
    let res
    if (this.data.id) {
      res = await reqUpdateAddress({ ...params, id: this.data.id })
    } else {
      res = await reqAddAddress(params)
    }
    if (res.code === 200) {
      wx.navigateBack()
      wx.toast({ title: this.data.id ? '编辑收货地址成功' : '新增收货地址成功' })
    }
  },
  // 获取定位信息
  async getLocation() {
    let { latitude, longitude, name } = await wx.chooseLocation()
    this.qqmapsdk.reverseGeocoder({
      // 传入经、纬度
      location: {
        latitude,
        longitude
      },

      success: (res) => {
        // 获取选择的
        const { street, street_number } = res.result.address_component

        // province 省  city 市  district 区
        const {
          province, // 省
          city, // 市
          district, // 区
          adcode, // 行政区划代码
          city_code, // 城市代码，由国家码+行政区划代码（提出城市级别）组合而来，总共为9位
          nation_code // 国家代码
        } = res.result.ad_info
        console.log(res)
        this.setData({
          // 省级: 前两位有值，后4位置0，如，河北省: 130000
          provinceCode: adcode.replace(adcode.substring(2, 6), '0000'),
          provinceName: province,

          // 市前面多个国家代码，需要进行截取
          cityCode: city_code.slice(nation_code.length),
          cityName: city,

          // 东莞市、中山市、修州市、嘉关市 因其下无区县级，
          districtCode: district && adcode,
          districtName: district,

          // 详细地址
          address: street + street_number + name,
          fullAddress: street_number + name
        })
      }
    })
  },



  /**
   * 获取定位信息用此api需要再app.json中配置
   **/

  // "requiredPrivateInfos": ["getLocation","chooseLocation"],
  // "permission": {
  //   "scope.userLocation": {
  //     "desc": "获取地理位置是为了填写收货地址"
  //   }
  // }
  async Location() {
    // 调用 getSetting 方法获取用户所有的授权信息
    // 返回的 authSetting 包含小程序已向小程序申请过的权限已经授权结果(true、false)
    const { authSetting } = await wx.getSetting()

    // scope.userLocation 是否已经授权获取地理位置的信息
    // 如果之前没有申请过返回 undefined，需要调用 getLocation
    // 如果之前同意了授权，返回 true，需要调用 getLocation
    // 如果之前拒绝了授权，返回 false，需要用户手动进行授权
    // 等于 true，或者不等于 undefined，说明需要进行授权
    // const isAuth =
    //   authSetting['scope.userLocation'] ||
    //   authSetting['scope.userLocation'] === undefined

    // 为了避免冗余的条件判断，使用 !! 把代码进行优化
    console.log(authSetting['scope.userLocation'])
    if (authSetting['scope.userLocation'] === false) {
      // 弹窗询问用户是否进行授权
      const modalRes = await wx.modal({
        title: '授权提示',
        content: '需要需要您的地理位置信息，请确认授权'
      })

      // 如果用户点击了取消，说明用户拒绝了授权，给用户提示
      if (!modalRes) return wx.toast({ title: '您拒绝了授权' })

      // 如果用户点击了确定，调用 wx.openSetting 打开微信客户端小程序授权页面
      // 并返回授权以后的结果
      const { authSetting } = await wx.openSetting()

      // 如果用户没有更新授权信息，提示没有更新授权
      if (!authSetting['scope.userLocation'])
        return wx.toast({ title: '授权失败！' })

      try {
        // 如果用户更新授权信息，则调用 getLocation 获取用户地理位置信息
        const locationRes = await wx.getLocation()
        // 打印地理位置信息
        console.log(locationRes)
      } catch (err) {
        console.log(err)
      }
    } else {
      try {
        // 如果是第一次调用 getLocation 或者之前授权过
        // 直接调用 getLocation 获取用户信息即可
        const locationRes = await wx.getLocation()
        console.log(locationRes)
      } catch (error) {
        wx.toast({ title: '您拒绝授权获取地址位置' })
      }
    }
  }
})
